package 顺序表;

import java.util.Arrays;

public class MySeqList {
    private int[] array;
    private int usedSize;

    public MySeqList(int initCapacity) {
        array = new int[initCapacity];
    }


    //顺序表常用的方法
    //打印有效数据元素
    public void display(){
        for (int i = 0; i < this.usedSize; i++) {
            System.out.println(this.array[i]+" ");
        }
    }
    //判断数组满了没有
    public boolean isFull(){
        if(usedSize>=array.length){
            return true;
        }else {
            return false;
        }
    }

    //增加
    public void add(int data){
        if(isFull()) {
            //扩容
            this.array = Arrays.copyOf(this.array, this.array.length + 1);
        }
            this.array[this.usedSize] = data;
            usedSize++;
    }
    //在某个位置增加
    public void add(int pos ,int data){
        if(pos<0||pos> array.length){
            System.out.println("位置不合适");
            return ;
        }
        if(isFull()){
            //扩容
            this.array = Arrays.copyOf(this.array,this.array.length+1);
        }
        if(pos<usedSize){
            //必须倒着诺数据
            for (int i = usedSize-1; i >=pos; i--) {
                array[i+1] = array[i];
            }
        }
        this.array[pos] = data;
        usedSize++;
    }
    //删除
    public void del(int pos ){
        if(pos<0||pos>=usedSize){
            System.out.println("位置不合法");
            return;
        }
        for (int i = pos; i <usedSize-1; i++) {
            this.array[i] = this.array[i+1];
        }
//        this.array[usedSize-1]=null;//若为引用类型
        usedSize--;
    }

    //查找
    public boolean contains(int toFind){
        for (int i = 0; i < usedSize; i++) {
            if(array[i]==toFind){
                return true;
            }
        }
        return false;
    }
    //查找返回下标
    public int indexOf(int toFind){
        for (int i = 0; i < usedSize; i++) {
            if(array[i]==toFind){
                return i;
            }
        }
        return -1;
    }

    //获得某个下标的元素
    public int get(int pos){
        if(pos<0||pos>=usedSize){
            throw new IndexOutOfBoundsException("不合法");
        }
        return array[pos];
    }
    //设置某个位置的元素
    public void set(int pos ,int data){
        if(pos<0||pos>=usedSize){
            throw new IndexOutOfBoundsException("不合法");
        }
        array[pos] = data;
    }
    //获取顺序表的长度
    public int size() {
        return this.usedSize;
    }
    //清空顺序表
    public void clear(){
//        for (int i = 0; i < usedSize; i++) {
//           array[i] = null;
//        }
        this.usedSize = 0;
    }
}
